]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensions-tool: Add '--prefs' list option
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 11 Jan 2019 11:18:14 +0000 (12:18 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 21 Aug 2019 16:28:02 +0000 (18:28 +0200)
We are about to add a 'prefs' command for launching an extension's
preference dialog. As that command only makes sense for extensions
that actually have preferences, shell completion should filter the
list of extensions accordingly. To allow that, add an appropriate
list option.

https://gitlab.gnome.org/fmuellner/gnome-extensions-tool/merge_requests/2
https://gitlab.gnome.org/GNOME/gnome-shell/issues/1234

src/extensions-tool/command-list.c
src/extensions-tool/man/gnome-extensions.txt

index 0313cd93c1b504c641554580eb5c6ba362189d1d..b5cee59230a58aba94809a324550c6248e9f4c24 100644 (file)
@@ -31,7 +31,8 @@ typedef enum {
   LIST_FLAGS_USER     = 1 << 0,
   LIST_FLAGS_SYSTEM   = 1 << 1,
   LIST_FLAGS_ENABLED  = 1 << 2,
-  LIST_FLAGS_DISABLED = 1 << 3
+  LIST_FLAGS_DISABLED = 1 << 3,
+  LIST_FLAGS_NO_PREFS = 1 << 4
 } ListFilterFlags;
 
 static gboolean
@@ -67,10 +68,12 @@ list_extensions (ListFilterFlags filter, DisplayFormat format)
     {
       g_autoptr (GVariantDict) info = NULL;
       double type, state;
+      gboolean has_prefs;
 
       info = g_variant_dict_new (value);
       g_variant_dict_lookup (info, "type", "d", &type);
       g_variant_dict_lookup (info, "state", "d", &state);
+      g_variant_dict_lookup (info, "hasPrefs", "b", &has_prefs);
 
       if (type == TYPE_USER && (filter & LIST_FLAGS_USER) == 0)
         continue;
@@ -84,6 +87,9 @@ list_extensions (ListFilterFlags filter, DisplayFormat format)
       if (state != STATE_ENABLED && (filter & LIST_FLAGS_DISABLED) == 0)
         continue;
 
+      if (!has_prefs && (filter & LIST_FLAGS_NO_PREFS) == 0)
+        continue;
+
       if (needs_newline)
         g_print ("\n");
 
@@ -105,6 +111,7 @@ handle_list (int argc, char *argv[], gboolean do_help)
   gboolean system = FALSE;
   gboolean enabled = FALSE;
   gboolean disabled = FALSE;
+  gboolean has_prefs = FALSE;
   GOptionEntry entries[] = {
     { .long_name = "user",
       .arg = G_OPTION_ARG_NONE, .arg_data = &user,
@@ -118,6 +125,9 @@ handle_list (int argc, char *argv[], gboolean do_help)
     { .long_name = "disabled",
       .arg = G_OPTION_ARG_NONE, .arg_data = &disabled,
       .description = _("Show disabled extensions") },
+    { .long_name = "prefs",
+      .arg = G_OPTION_ARG_NONE, .arg_data = &has_prefs,
+      .description = _("Show extensions with preferences") },
     { .long_name = "details", .short_name = 'd',
       .arg = G_OPTION_ARG_NONE, .arg_data = &details,
       .description = _("Print extension details") },
@@ -161,6 +171,9 @@ handle_list (int argc, char *argv[], gboolean do_help)
   if (disabled || !enabled)
     flags |= LIST_FLAGS_DISABLED;
 
+  if (!has_prefs)
+    flags |= LIST_FLAGS_NO_PREFS;
+
   return list_extensions (flags, details ? DISPLAY_DETAILED
                                          : DISPLAY_ONELINE) ? 0 : 2;
 }
index c362e4d0af2baa95b22a90012beb623a3396bb14..e782103fd61e0fc052f25945111246b908fe80fc 100644 (file)
@@ -81,6 +81,9 @@ Displays a list of installed extensions.
   *--disabled*;;
     Include disabled extensions
 
+  *--prefs*;;
+    Only include extensions with preferences
+
   *-d*;;
   *--details*;;
     Show some extra information for each extension